{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 768 entries, 0 to 767\n",
      "Data columns (total 9 columns):\n",
      "Pregnancies                 768 non-null int64\n",
      "Glucose                     768 non-null int64\n",
      "BloodPressure               768 non-null int64\n",
      "SkinThickness               768 non-null int64\n",
      "Insulin                     768 non-null int64\n",
      "BMI                         768 non-null float64\n",
      "DiabetesPedigreeFunction    768 non-null float64\n",
      "Age                         768 non-null int64\n",
      "Outcome                     768 non-null int64\n",
      "dtypes: float64(2), int64(7)\n",
      "memory usage: 54.1 KB\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>6</td>\n",
       "      <td>148</td>\n",
       "      <td>72</td>\n",
       "      <td>35</td>\n",
       "      <td>0</td>\n",
       "      <td>33.6</td>\n",
       "      <td>0.627</td>\n",
       "      <td>50</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>85</td>\n",
       "      <td>66</td>\n",
       "      <td>29</td>\n",
       "      <td>0</td>\n",
       "      <td>26.6</td>\n",
       "      <td>0.351</td>\n",
       "      <td>31</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>183</td>\n",
       "      <td>64</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>23.3</td>\n",
       "      <td>0.672</td>\n",
       "      <td>32</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>89</td>\n",
       "      <td>66</td>\n",
       "      <td>23</td>\n",
       "      <td>94</td>\n",
       "      <td>28.1</td>\n",
       "      <td>0.167</td>\n",
       "      <td>21</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>137</td>\n",
       "      <td>40</td>\n",
       "      <td>35</td>\n",
       "      <td>168</td>\n",
       "      <td>43.1</td>\n",
       "      <td>2.288</td>\n",
       "      <td>33</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \\\n",
       "0            6      148             72             35        0  33.6   \n",
       "1            1       85             66             29        0  26.6   \n",
       "2            8      183             64              0        0  23.3   \n",
       "3            1       89             66             23       94  28.1   \n",
       "4            0      137             40             35      168  43.1   \n",
       "\n",
       "   DiabetesPedigreeFunction  Age  Outcome  \n",
       "0                     0.627   50        1  \n",
       "1                     0.351   31        0  \n",
       "2                     0.672   32        1  \n",
       "3                     0.167   21        0  \n",
       "4                     2.288   33        1  "
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 导入必要模块\n",
    "import numpy as numpy\n",
    "import pandas as pandas\n",
    "import matplotlib.pyplot as matplot\n",
    "import seaborn as seaborn\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "#竞赛的评价指标为logloss\n",
    "from sklearn.metrics import log_loss  \n",
    "%matplotlib inline\n",
    "data=pandas.read_csv('diabetes.csv');\n",
    "#数据信息\n",
    "data.info()\n",
    "#前五行\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>3.845052</td>\n",
       "      <td>120.894531</td>\n",
       "      <td>69.105469</td>\n",
       "      <td>20.536458</td>\n",
       "      <td>79.799479</td>\n",
       "      <td>31.992578</td>\n",
       "      <td>0.471876</td>\n",
       "      <td>33.240885</td>\n",
       "      <td>0.348958</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>3.369578</td>\n",
       "      <td>31.972618</td>\n",
       "      <td>19.355807</td>\n",
       "      <td>15.952218</td>\n",
       "      <td>115.244002</td>\n",
       "      <td>7.884160</td>\n",
       "      <td>0.331329</td>\n",
       "      <td>11.760232</td>\n",
       "      <td>0.476951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.078000</td>\n",
       "      <td>21.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>62.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>27.300000</td>\n",
       "      <td>0.243750</td>\n",
       "      <td>24.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>117.000000</td>\n",
       "      <td>72.000000</td>\n",
       "      <td>23.000000</td>\n",
       "      <td>30.500000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>0.372500</td>\n",
       "      <td>29.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>6.000000</td>\n",
       "      <td>140.250000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>127.250000</td>\n",
       "      <td>36.600000</td>\n",
       "      <td>0.626250</td>\n",
       "      <td>41.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>17.000000</td>\n",
       "      <td>199.000000</td>\n",
       "      <td>122.000000</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>846.000000</td>\n",
       "      <td>67.100000</td>\n",
       "      <td>2.420000</td>\n",
       "      <td>81.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Pregnancies     Glucose  BloodPressure  SkinThickness     Insulin  \\\n",
       "count   768.000000  768.000000     768.000000     768.000000  768.000000   \n",
       "mean      3.845052  120.894531      69.105469      20.536458   79.799479   \n",
       "std       3.369578   31.972618      19.355807      15.952218  115.244002   \n",
       "min       0.000000    0.000000       0.000000       0.000000    0.000000   \n",
       "25%       1.000000   99.000000      62.000000       0.000000    0.000000   \n",
       "50%       3.000000  117.000000      72.000000      23.000000   30.500000   \n",
       "75%       6.000000  140.250000      80.000000      32.000000  127.250000   \n",
       "max      17.000000  199.000000     122.000000      99.000000  846.000000   \n",
       "\n",
       "              BMI  DiabetesPedigreeFunction         Age     Outcome  \n",
       "count  768.000000                768.000000  768.000000  768.000000  \n",
       "mean    31.992578                  0.471876   33.240885    0.348958  \n",
       "std      7.884160                  0.331329   11.760232    0.476951  \n",
       "min      0.000000                  0.078000   21.000000    0.000000  \n",
       "25%     27.300000                  0.243750   24.000000    0.000000  \n",
       "50%     32.000000                  0.372500   29.000000    0.000000  \n",
       "75%     36.600000                  0.626250   41.000000    1.000000  \n",
       "max     67.100000                  2.420000   81.000000    1.000000  "
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#数据描述\n",
    "data.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 糖尿病人数直方图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "seaborn.countplot(data.Outcome);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 选择合适得特征值，分割数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(614, 8)"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Y_Feature=data['Outcome']\n",
    "X_Feature =data.drop('Outcome', axis = 1)\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "#random select 20% as test data\n",
    "x_train, x_test, y_train, y_test = train_test_split(X_Feature, Y_Feature, random_state=33, test_size=0.2)\n",
    "x_train.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 标准化处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "ss_X = StandardScaler()\n",
    "x_train=ss_X.fit_transform(x_train)\n",
    "x_test = ss_X.fit_transform(x_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 缺省的Logistic正则"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "logloss of each fold is:  [0.46129644 0.46510588 0.56426612 0.44377717 0.46617809]\n",
      "cv logloss is: 0.48012474004701106\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0.7402597402597403"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "lr= LogisticRegression()\n",
    "from sklearn.cross_validation import cross_val_score\n",
    "loss = cross_val_score(lr, x_train, y_train, cv=5, scoring='neg_log_loss')\n",
    "print 'logloss of each fold is: ',-loss\n",
    "print'cv logloss is:', -loss.mean()\n",
    "\n",
    "lr.fit(x_train,y_train)\n",
    "lr.score(x_test,y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "采用5这交叉验证，发现负损失稳定在0.4左右,准确度为0.73,下面用GridSearchCV进行参数调优"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5, error_score='raise',\n",
       "       estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
       "          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
       "          verbose=0, warm_start=False),\n",
       "       fit_params=None, iid=True, n_jobs=1,\n",
       "       param_grid={'penalty': ['l1', 'l2'], 'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "penaltys = ['l1','l2']\n",
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "tuned_parameters = dict(penalty = penaltys, C = Cs)\n",
    "\n",
    "lr_penalty= LogisticRegression()\n",
    "grid= GridSearchCV(lr_penalty, tuned_parameters,cv=5, scoring='neg_log_loss')\n",
    "grid.fit(x_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([0.00282516, 0.00275798, 0.00244303, 0.00339441, 0.00315719,\n",
       "        0.003087  , 0.00379777, 0.00329165, 0.00360203, 0.00362625,\n",
       "        0.00277553, 0.0023922 , 0.00354481, 0.00334883]),\n",
       " 'mean_score_time': array([0.00222125, 0.00185637, 0.00199313, 0.00197988, 0.00186162,\n",
       "        0.00181241, 0.00183372, 0.00223641, 0.00215921, 0.00247059,\n",
       "        0.0017406 , 0.001439  , 0.00229459, 0.00270238]),\n",
       " 'mean_test_score': array([-0.69314718, -0.64214833, -0.6721329 , -0.52844007, -0.48658742,\n",
       "        -0.47999943, -0.48043706, -0.48017599, -0.48089965, -0.48086932,\n",
       "        -0.48095236, -0.48095123, -0.48095803, -0.48095956]),\n",
       " 'mean_train_score': array([-0.69314718, -0.6412946 , -0.67079105, -0.52380684, -0.47502596,\n",
       "        -0.46674403, -0.46228807, -0.46214818, -0.46206767, -0.46206619,\n",
       "        -0.46206531, -0.4620653 , -0.46206529, -0.46206529]),\n",
       " 'param_C': masked_array(data=[0.001, 0.001, 0.01, 0.01, 0.1, 0.1, 1, 1, 10, 10, 100,\n",
       "                    100, 1000, 1000],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_penalty': masked_array(data=['l1', 'l2', 'l1', 'l2', 'l1', 'l2', 'l1', 'l2', 'l1',\n",
       "                    'l2', 'l1', 'l2', 'l1', 'l2'],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'C': 0.001, 'penalty': 'l1'},\n",
       "  {'C': 0.001, 'penalty': 'l2'},\n",
       "  {'C': 0.01, 'penalty': 'l1'},\n",
       "  {'C': 0.01, 'penalty': 'l2'},\n",
       "  {'C': 0.1, 'penalty': 'l1'},\n",
       "  {'C': 0.1, 'penalty': 'l2'},\n",
       "  {'C': 1, 'penalty': 'l1'},\n",
       "  {'C': 1, 'penalty': 'l2'},\n",
       "  {'C': 10, 'penalty': 'l1'},\n",
       "  {'C': 10, 'penalty': 'l2'},\n",
       "  {'C': 100, 'penalty': 'l1'},\n",
       "  {'C': 100, 'penalty': 'l2'},\n",
       "  {'C': 1000, 'penalty': 'l1'},\n",
       "  {'C': 1000, 'penalty': 'l2'}],\n",
       " 'rank_test_score': array([14, 12, 13, 11, 10,  1,  3,  2,  5,  4,  7,  6,  8,  9],\n",
       "       dtype=int32),\n",
       " 'split0_test_score': array([-0.69314718, -0.64371675, -0.66946739, -0.52816851, -0.48618155,\n",
       "        -0.4678555 , -0.46345904, -0.46129644, -0.46108568, -0.46088502,\n",
       "        -0.46086642, -0.4608487 , -0.46084313, -0.46084513]),\n",
       " 'split0_train_score': array([-0.69314718, -0.64085132, -0.66189542, -0.52529099, -0.47823867,\n",
       "        -0.47085398, -0.46684285, -0.46669378, -0.46662379, -0.46662226,\n",
       "        -0.46662151, -0.46662149, -0.46662149, -0.46662148]),\n",
       " 'split1_test_score': array([-0.69314718, -0.64113725, -0.67517494, -0.52518603, -0.47166225,\n",
       "        -0.47077815, -0.46426366, -0.46510588, -0.4646352 , -0.46473286,\n",
       "        -0.46468867, -0.46469927, -0.46469489, -0.46469595]),\n",
       " 'split1_train_score': array([-0.69314718, -0.64188719, -0.67797602, -0.52532854, -0.47970513,\n",
       "        -0.47076994, -0.4669271 , -0.46678157, -0.46671611, -0.4667146 ,\n",
       "        -0.4667139 , -0.46671388, -0.46671388, -0.46671388]),\n",
       " 'split2_test_score': array([-0.69314718, -0.64575466, -0.6680453 , -0.5512625 , -0.54752984,\n",
       "        -0.54301469, -0.56469495, -0.56426612, -0.56847801, -0.56834734,\n",
       "        -0.56879909, -0.56879096, -0.56883272, -0.5688357 ]),\n",
       " 'split2_train_score': array([-0.69314718, -0.63908575, -0.66162164, -0.5135644 , -0.45564429,\n",
       "        -0.44783203, -0.44194643, -0.44184498, -0.44173178, -0.44173047,\n",
       "        -0.44172921, -0.4417292 , -0.44172919, -0.44172919]),\n",
       " 'split3_test_score': array([-0.69314718, -0.63856226, -0.67581323, -0.50975335, -0.45503223,\n",
       "        -0.44706595, -0.44365688, -0.44377717, -0.44397598, -0.44400066,\n",
       "        -0.44403119, -0.4440332 , -0.44403654, -0.44403656]),\n",
       " 'split3_train_score': array([-0.69314718, -0.64333601, -0.67874616, -0.5309552 , -0.48382671,\n",
       "        -0.47509784, -0.47066678, -0.47052445, -0.4704446 , -0.47044314,\n",
       "        -0.47044228, -0.47044226, -0.47044225, -0.47044225]),\n",
       " 'split4_test_score': array([-0.69314718, -0.64152376, -0.67221592, -0.52767402, -0.47216067,\n",
       "        -0.47104103, -0.46583102, -0.46617809, -0.46606368, -0.46612355,\n",
       "        -0.46611895, -0.4661268 , -0.46612564, -0.46612722]),\n",
       " 'split4_train_score': array([-0.69314718, -0.64131272, -0.67371601, -0.52389506, -0.47771499,\n",
       "        -0.46916638, -0.46505718, -0.46489609, -0.46482209, -0.46482048,\n",
       "        -0.46481966, -0.46481964, -0.46481963, -0.46481963]),\n",
       " 'std_fit_time': array([0.00086323, 0.00059983, 0.00060702, 0.00071247, 0.00065826,\n",
       "        0.00033766, 0.00033068, 0.00036014, 0.00111406, 0.00057291,\n",
       "        0.00033485, 0.00048554, 0.0004031 , 0.00028537]),\n",
       " 'std_score_time': array([9.43189981e-04, 4.28180928e-04, 3.54302375e-04, 4.90339327e-05,\n",
       "        1.43874296e-04, 7.93332081e-05, 1.74334456e-04, 5.03879477e-04,\n",
       "        4.15763520e-04, 8.80480163e-04, 1.15419279e-04, 4.23557745e-04,\n",
       "        2.53882737e-04, 3.60673921e-04]),\n",
       " 'std_test_score': array([0.        , 0.00243715, 0.00305426, 0.0132657 , 0.03206037,\n",
       "        0.03276814, 0.04294169, 0.04285084, 0.04453539, 0.04448689,\n",
       "        0.04466504, 0.04466183, 0.04467864, 0.04467945]),\n",
       " 'std_train_score': array([0.        , 0.00138524, 0.00757197, 0.00566626, 0.00992521,\n",
       "        0.00965834, 0.01033363, 0.01031565, 0.01033126, 0.01033118,\n",
       "        0.01033136, 0.01033136, 0.01033136, 0.01033136])}"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZQAAAEKCAYAAAA1qaOTAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3Xd8VFXawPHfk0mDNAIEEggQurQEJIJKE0FBZGkquit2F3X1Xde2YllXrGDf1V0FsWBZ0UWCiC5SFEEUAZEWEClSEgIJgVTSZua8f8wEAiQwSWZyU57vfmbnlnPvfQ5Cnpxz7z1HjDEopZRS1eVndQBKKaXqB00oSimlvEITilJKKa/QhKKUUsorNKEopZTyCk0oSimlvEITilJKKa/QhKKUUsorNKEopZTyCn+rA6hJzZs3N3FxcVaHoZRSdcpPP/102BgTdbZyDSqhxMXFsW7dOqvDUEqpOkVE9npSTru8lFJKeYUmFKWUUl6hCUUppZRXaEJRSinlFZpQlFJKeYUmFKWUUl6hCUUppZRXaEJRSinlFZpQlFJe0/+dK+j/zhVWh+EV9aUuNVkPTShKWay+/OBSShOKUkopr9CEopRSyis0oSillPIKTShKKaW8QhOKUkopr7AkoYhIUxFZIiI73N+RZygbLiKpIvJamW3LRWS7iGxwf1rUTORKKaUqYlULZQqwzBjTGVjmXq/Ik8C35Wy/1hjT2/1J90WQSimlPGdVQhkLzHYvzwbGlVdIRPoCLYHFNRSXqiNuWnQTNy26yeowlFJlWJVQWhpj0gDc36d1WYmIH/Ai8EAF53jH3d31NxER34WqlFLKEz6bU15ElgLR5ex6xMNT/An40hizv5x8ca0xJlVEwoBPgeuA9yqIYzIwGaBt27YeXloppVRl+SyhGGOGV7RPRA6JSIwxJk1EYoDy7oFcAAwSkT8BoUCgiOQZY6YYY1Ld18gVkf8A/aggoRhjZgIzARITE031aqWU9/39w22uhXrQg6d1qX1qsh5WdXktAG5wL98AfHZqAWPMtcaYtsaYOOB+4D1jzBQR8ReR5gAiEgCMBrbUTNhKKaUq4rMWyllMAz4RkVuAfcBVACKSCNxujLn1DMcGAV+5k4kNWAq86eN4VS2zNS3H6hCUUqewJKEYYzKBYeVsXweclkyMMe8C77qX84G+vo1QKaVUZVnVQlGqWqb8Z49roY73bytVn+jQK0oppbxCE4pSSimv0C4vpXzMOJ048/JwZGfjyMp2fWdn4czKwpG2i7bFxfhjSLt1DGDAgPv/MKXLJ32fuq3M0/Bljj15uymzaE4ULu98p53n9P3m1OPd5+xSXARAyhUDPPzTqb3qS11K61GycyMBnRJ8ei1NKEp5yJSU4MjJKZMYsnBkZ+PMzsaR7d5+0icLZ3YOjpwccDorPK+/vw0/f0Peul9ObKxo7IfTtstp26Wc3acdI2cq49pQ4fgTUs5B7lVT4ur0KDqQVcHBdUd9qUtpPUxBvs+vpQlFNSjGGExh4Ykf+p4mhqxsnMeOVXxiEfzCw7FFRGALC8UWLATGBGOLsePnKMRmz8AWaMcW6MQW2hhb6y7Y2vXCr0NfVj7+d44V+HPZkq1n+CleN3w5vDsAo5YmWxxJ9dWXupTWo3OvC31+LU0oqk4KMgWI01C8f/9J3UjHE0NW9onWRNl9WdmYkpKKTxwQgK1JBLbwCGwREQRERxPctasrUTSJcCeNJsfXbQEObIX78MvegRzaBAc3wZHVJ84XGg0x8RBzBUTHQ0wCNGl7UuLIL3jKtVDHk4lSmlBUnWOMITzX0DQbdl1yabll/Bo3xq9JhOuHf3g4QR06nkgCERH4Rbi+beEnttkiIpBGjSh3rFFjIDvFlTDSNsL+TbBmI+QeOFGmSTtXwuj9B4jp7UogYS199KegVO2jCUXVKcZu59Azz9IsG/KDodPjz7qTQRNsEe4up/BwJDCw6hdxOuHILlfiSNvoTiKboOCIa7/4QfMuEDfQlUBi4iG6FzSqcJ44pRoETSiqznDm55N63/3kLV9OVigcjYDEceVOpeM5Rwlk/OJOHu7Wx6EtUJzn2m8LhBbdoNtod5dVb2jZAwIbV79CStUzmlBUnVByKJ39d9xO0S/bif77Y/z21pOVP0nxMTiUDAc3nkgg6VvBUezaHxDiamn0vtZ93yMBmncF/2q0dpRqQDShqFqvcPuv7L/9dhzZ2bR5/d+EDhkCZ0soBVknuqpKu60O/wrG/fhuo0hXwuh/u7vbKgGadgA/m+8rpFQ9pQlF1Wp5q1aRevdf8GvcmLgP3ie4e/fTC+UeciePDScSSNbeE/vDWrlaHN3HnnjSKiK21jxVNfXabgCMsjgOb9C61D41WQ9NKKrWypo7l7THpxLUsSNtZrxBQPSJCUD9bU56dcqCF7pC3sETBzXtAK36QN8bXIkjOgFCoyyIXqmGRxOKqnWMMWT84x9kvjGDkIEDaf3Ky9hCQ08q06ZlPjFRBdBhjOtGeUwCRPeE4AiLolZKaUJRtYqzuJi0hx4m54svaHLVVUQ/9jckIOC0crauRewmkA4TZloQpVKqPJpQVK1hP3qUlP/7PwrW/UTUfffS7NZby3/J8OheupQU8WFYJB1qPkylVAU0oahaoXjvXvZPvo2StDRav/Qi4aPOcAtx63yWNW7Eq01D+eDTy44nHUFOWi4lIsfXy5Y5076zHS9lBmX09HgRwRiwOw12h6HY7qTEYci3Z4HxY+RH1yHih+CHn/gh4odf6bL7u/Rz2rrYjpe1Hd9uQ05aL122lb/s54etzLpNbMfL2Pzc3yLY/GyufX6uc/r7ucrZ/GwUF7tak4t2rDtR/+N/Pif+/8Sfy4llyhxx2rFy8vqpx5x8npOPP7GPk5x8/EklASgpCUQwrE3Zia/58vEQe4nrv0l+cREhgUE+vJImFFULHPv5Z1L+dCcYQ9t336HxuedWWLbIUcQL299nTssogpyQ0CLBNeBjmaHWzfHB1c3xodoNJw/ffrxM2eUyw7Gb0v+VOb7ca7iPtzsMxQ4HxXYnxQ4nxXY7JQ7XsuvbQYndYHc6ykbi/kHSCHCyLzsTcII4XRfBgDgRDIg5eV/pOgY5vu3kfSJlhq+vKcGurwe+rwdTabp/9t68bLy1cVSXux5rU3ZwUYeePr2UJhRlqZxFizjw1wfxj4mm7YwZBMbFVVj2t+zfeODru9luKyKxoJg8v2CmDZrms9gKih1k5BaRkVd08nfuifXD7uVix+nD0wfYhKjQIKLCglzfTdzLpevu5Svn34yfn50fb/r0+LHGGJwGnMbgNAbjnvakdN3pzjdl113JjePrTqfB4XTiMA4cTid248DhtGN3OnE4DQ5jx+504DAGp9PhXnZidzpwGteyw+nE4XS4z2Fw4sDudLr3u87rNE4cxrXtnY2uOkzqWTqCgTnt/11LpswULWW3c1IZ9x/GaftOmt+l7NnNqec6/ReKk6aBKd1b5heJUvN/XQLA2C7Dqcs++3UpAJ2bt/L5tTShKEsYYzjy1lukv/Aijc49l9h/vYZ/ZPljYRljWLBrAU//+DTBTsO/DqbzcVhz8v0q31FQ4nCSmVfsTgiFHM4tLjdRZOQWkVdkP+14EWgWEkhzd0Lo2DzkRJI4JVFENAoo/x7QKfz8yruOYBOw+bQzxPvm/Po+AH8dfIXFkVTf4v2fA/DU8Lrd2lqyfyEArcOb+vxamlBUjTN2OwefeoqsOR8TPuoyYp59Fr+g8vt280vyeWr1UyzcvZDzos/j2d+207JpD14zR46XcToNWQUlZRJCIRm5RRwuTRxlEsWR/OJyrxMW7H88IfRoFX48KTQv08JoERZE05BA/G06c7ZS5dGEomqUIy+f1HvvIX/FSpr98Y9E3fMXxK/8H9BbM7fywLcPkJKXwp297+SPrS/G9sN5cOnT7N7yI9kHhnL+M8s4nFeE3Xn6/YIgf7/jiaFds8YkxkWe1pIoTRjBATrkilLVpQlF1ZiSQ4fYf9vtFO3YQfQTU4mcOLHccsYYPtz2IS/99BJNg5vy1qVvkRidCCtecBXoPpaCVUcpKWzBwB7NaVFBl1NokL9HXU5KKe/QhKJqROEvv7D/tttx5uXR5o03CB00sNxyWYVZ/G3V31iespyL2lzEkxc+SZPgJq6dyfMhth8mIpbCnI4ENDrIC1eNrsFaKKXORBOK8rm8lStdAzyGh9PuPx8S3LVrueXWHVzHgysf5GjhUab0m8IfzvnDiRbG4R1waDOMeJZNKdk4SiJo3HRzDdZCKXU2endR+dTRjz9h/+13ENCuHXEfzyk3mTicDl7f+Dq3LL6FRv6N+GDUB1zb7dqTu6uSk1zf3ccyf0MqiIPgsD01UwmllEe0haJ8wjidZLz0Epmz3iJkyGBav/gSttCQ08odyj/ElJVTWHdoHaM7jObR8x8lJOD0ciQnQdsLsIfG8PnGbQSF7MfPVv4TW0opa2hCUV7nLCriwINTyF20iCbXXE30o48i/qf/VVuRsoJHvnuEIkcRTw98mjEdx5R/wvRfXDMrXvYc3+/K5HBeERGtdvm4FkqpytKEorzKfvQoKX+6k4Kff6bFAw/Q9OabTnvSqsRRwsvrX+b9re/TNbIrzw95nvYR7Ss+6db5gEC3McxflEpYsD9BISm+rYhSqtIsSSgi0hT4GIgD9gATjTFHyynnAErvvO4zxoxxb28PzAGaAuuB64wx2v9hseI9e9h3223YDx6i9SuvED5yxGll9uXs44EVD7A1cyu/P+f33Jd4H0G2swxYl5wE7S6kILgFX23ZyOXxMXyb6/BRLZRSVWXVTfkpwDJjTGdgmXu9PAXGmN7uT9n+kOnAy+7jjwK3+DZcdTbHfvqJPVdfgzM3j3az3y03mXy5+0smLpxISm4Krwx9hYf7P3z2ZJK+DTJ+gR7jWbrtEPnFDsb1bu2jWiilqsOqhDIWmO1eng2MO0PZk4ir/+RiYG5Vjlfel/3FF+y78SZskZHEzfmIRr17n7T/WMkxHlv1GA+ufJAukV2Y+7u5DGs7zLOTb5kH4gfdxvDZhlRahgfRv0MzH9RCKVVdViWUlsaYNAD3d4sKygWLyDoRWS0ipUmjGZBljCkdUS8FqPBXVhGZ7D7HuoyMDG/Fr3C90X54xkwO3Hc/wQnxxM35iMC2bU8qs/3Idq754hrm75zP5PjJvD3ibWJCYzy9gLu7awBH/SJZvj2DMQmtsFVhUEillO/57B6KiCwFosvZ9UglTtPWGHNARDoAX4vIZiCnnHIVTvxgjJkJzARITEy0YIKI+smUlJA2dSrZcz8lfPRoYp55Gr/AwBP7jeGT7Z/w3NrnCA8K581L36R/TP/KXeRQMmTugPPv4MstadidhrHa3aVUreWzhGKMqXASARE5JCIxxpg0EYkB0is4xwH3924RWQ70AT4FmoiIv7uVEgsc8HoFVIUceXmk/vlu8r//nmZ33E7Un/980pNc2UXZTP1hKkv2LmFA6wE8PeBpmjWqQjdVctKJ7q4PdtKpRSg9WoV7sSZKKW+yqstrAXCDe/kG4LNTC4hIpIgEuZebAwOArcY1hd43wJVnOl75RklaGnv/cC35a9YQ8/RTtLj77pOSyYb0DUz8fCLf7PuG+/rex7+H/btqyaS0uytuECklIazZc4RxvVvpYI9K1WJWJZRpwCUisgO4xL2OiCSKyCx3mW7AOhHZiCuBTDPGbHXvexC4V0R24rqn8laNRt9AFSQns2fi1ZQcOEDbmTNocsWJSZScxsmszbO4cdGNiAjvXfYeN/a8ET+p4l+xg5vgyC7oOYEFG10NUO3uUqp2s+Q9FGNMJnDaYz7GmHXAre7l74FeFRy/G+jnyxjVyXKXLyf13vuwNYmg3VsfEtyly/F9hwsO89DKh1idtpqRcSN57ILHCAsMq94Fk5NAbHDO7/hsZjJ920XSpmnjatZCKeVL+qa8Oqsj//kPh556muBzziH2jdcJaHHiobzvU7/noe8e4ljJMR6/4HEmdJ5Q/W6p0u6uDkPYlhPA9kO5PDm2RzVroZTyNU0oqkLG6ST9+Rc48s47hA4dSusXnscvxDVwY4mzhNd+fo23t7xNpyadeOvSt+gU2ck7F07bAEf3wKD7mL8hFX8/4fL4Vt45t1LKZzShqHI5Cwo48NcHyV2yhMhJk2j50BTE5pomNzUvlb+u+CubMjZxVZereOC8B2jk38h7F09OAj9/nF1H8/lXPzO4SxRNQwLPfpxSylKaUNRp7JmZ7P/TnyjctJmWDz9E0+uvP75v8Z7FPP794xgMLwx5gRFxpw+xUi3Hu7uGsuaQ4UB2IQ9edo53r6GU8glNKOokRbt3s3/ybdgPHyb21X8SNtz1OlGhvZDn1z7PJ79+QnzzeKYPnk5sWKz3A0hdD1n7YMgUPtuQSuNAG5d0b3lasbji+71/baVUtWhCUcflr1lDyv/9GfH3p917s2kUHw/Arqxd3P/t/ezM2snNPW/mrj53EeAX4JsgkueBXwBFnUbyxWfruLR7SxoH6l9TpeoC/ZfawNy06CYA3hn5zknbsxcs4MAjjxLYti1tZrxBYGwsxhiSdibx7I/P0jigMW8Mf4MBrQf4LjhjIHk+dLyY5ftKyCm0M7aPvnuiVF2hCaWBM8Zw+PXXOfzPV2ncvz+x//wHtogI8orzeOKHJ/jfnv/RP6Y/zw58lqjGUb4NJmUd5KTAxY/y2YZUmoUEMqhTc99eUynlNZpQGphrXk12LYwEU1xM2t8fJzspiYixY4l58gkkMJDkw8nc/+39pOWncfe5d3Nzz5ur/sZ7ZSTPA1sgOXGXsnTuGn5/Xhv8bVYN5qCUqixNKA2UIyeHlD/fzbHVq2l+1100v/NPGAzvJc/mlfWvENUoindHvkvvFr3PfjJvcDpd3V2dhrNo5zGK7c4zdnd9fNsFNROXUspjmlAaIFuJkz1/+APFe/cRM+1Zmowbx5HCIzz63aOsTF3JsLbDmHrhVCKCImouqJQ1kHsAekzlszWptGvWmD5tmtTc9ZVS1aYJpYEJLHQQdbAAe0gGbWfNIqR/P9akrWHKyilkF2XzSP9HuLrr1TU/qm9yEtiCSI8Zyve71vB/QzvpyMJK1TGaUBoQ++HDtEg7htNPiPvoP9jat+O1n19j5qaZtAtvx+vDX6dr0641H1hpd1fnS1jwSy7G0KCe7vrxpk+tDkEpr9CE0oBkvPoa4oT01o2Jig7hwa9uYX36esZ1GsdD/R6icYBFo/nu+wHyDkKP8Xy2/AC9WkfQMSrUmliUUlWmCaWBKPz1V7L++19yIwLYGGf4++dXUuIo4dlBzzK6w2hrg0tOAv9gdjcdxObUdTx6eTdr41FVVp9aW/WlLjVZD00oDUT6c8/jFxbKJwOLWBxfTLeQjrww5AXahre1NjCnA7Z+Bp0vZX5yFn4CYxJ0ZGGl6iJ9yL8ByFu5kvzvviPn9yNYHO/g/F02Phj1gfXJBGDv95CfjukxnvkbDnBhx+a0CA+2OiqlVBVoQqnnjN1O+nPPEdC2LU+1/olgWzDFFyQQaKslw8EnJ0FAYzY26s++I8cY21tbJ0rVVR4lFBEZICIh7uVJIvKSiLTzbWjKG7LmfkrRjp0kTzyX3cf20SasTc289e4Jh93V3dVlBElbjhLk78fIntFWR6WUqiJPf7K8DhwTkQTgr8Be4D2fRaW8wpGXR8arrxLQJ4FnG33N4NjBNfuy4tns/Q6OHcbebRwLN6UxvFtLwoJ9NIqxUsrnPE0odmOMAcYC/zDG/AMI811YyhsyZ76JIzOThaObU+Qs5oHEB6wO6WTJSRAQwirpQ2Z+sXZ3KVXHefqUV66IPARMAgaLiA3QXyVrsZLUVI68+y5mxGDetq/ghh43EBcRZ3VYJzjssHUBdB1J0uYjhAf7M6Srj0czVkr5lKctlKuBIuAWY8xBoDXwvM+iUtWW/vIrIMJr/bKIDI7ktvjbrA7pZHtWQMERirqOYfHWQ1weH0OQv83qqJRS1eBpQsnF1dW1UkS6AL2Bj3wXlqqOgk2byFm4kCPjB7HSvpW/nPsXQgNr2ZvnyUkQGMri4niOFTsY27vhDLWiVH3laUJZAQSJSGtgGXAT8K6vglJVZ4zh0LTp+DVrxlOdttC9WXfGdhprdVgnc5TAts+h6yjmbTpMq4hg+sU1tToqpVQ1eZpQxBhzDJgAvGqMGQ/08F1Yqqpyv1pMwfr1bJnQi/2OwzzU76Ha85hwqd3fQsFRcjqOZsWOw/yudyv8/HRkYaXqOk9vyouIXABcC9zi3qYd3rWMs7iY9BdewK9Te55t/iOj2o86bYKsU+eSt0RyEgSFsyDvHBzOnYzT7i6l6gVPf3X9C/AQkGSMSRaRDsA3vgtLVcXRDz6kJCWFhaOa4+fvzz1977E6pNPZi+GXE91dXVuG0S0m3OqolFJe4FFCMcZ8a4wZA/xbREKNMbuNMX/2cWyqEuxHj3L49dex90/g3ZCfuaXnLUSH1MK3zncvh8Js0ttezvp9WYzto++eKFVfeDr0Si8R+RnYAmwVkZ9EpMr3UESkqYgsEZEd7u/ICso5RGSD+7OgzPZ3ReS3MvtqaOLz2uvwa//CeewY/xqYR+vQ1tzQ4warQypf8jwIiuC/RzsBOrKwUvWJp11eM4B7jTHtjDFtgfuAN6tx3SnAMmNMZ1xPjU2poFyBMaa3+zPmlH0PlNm3oRqx1HlFu3dzdM4cDl/Sh1WBe7kv8T6C/WvhiL32IvjlC0y3y5m3KZ1+cU2JjbRoUi+llNd5mlBCjDHH75kYY5YDIdW47lhgtnt5NjCuGudq8NKffwFpFMyzPXdzXvR5DG873OqQyrfrayjKYW/0CHZl5Gt3l1L1jKcJZbeI/E1E4tyfR4HfqnHdlsaYNAD3d4sKygWLyDoRWS0ipyadp0Vkk4i8LCJB1YilTstfvZq8b75hy6iupAbm8eB5DyJSSx/BTU6C4CZ8lNGeAJtwea8YqyNSSnmRp48N3wxMBeYBgutFx5vOdICILAXKuyv8SCXia2uMOeB+quxrEdlsjNmF64mzg0AgMBN4EHiigjgmA5MB2ratBRNKeZFxODg0/TmIbsH0uC1c1eUqujbtanVY5SsphF++xNljHPM3ZzCkSwuaNK4lc7IopbzCo4RijDkKVOqpLmNMhf0uInJIRGKMMWkiEgOkV3COA+7v3SKyHOgD7Cpt3QBFIvIOcP8Z4piJK+mQmJhoKlOH2i57/mcUbdvGFzd0JaBRCXf2vtPqkCq2cykU57ItchiHcor422jt7lKqvjljQhGRz4EKfwiXc6PcUwuAG4Bp7u/Pyrl2JHDMGFMkIs2BAcBz7n2lyUhw3X/ZUsU46iznsWNkvPIKxd3aMztmJ1N6P0RkcLkPy9UOyUnQqCnvH2pLaNBhhndraXVESikvO1sL5QUfXXca8ImI3ALsA64CEJFE4HZjzK1AN2CGiDhx3euZZozZ6j7+QxGJwtX9tgG43Udx1lqZb72NPSOD1yfY6NikExO7TrQ6pIqVFMD2/2HvcQVf/HyYET2iCQ7QgRaUqm/OmFCMMd/64qLGmExgWDnb1wG3upe/B3pVcPzFvoirrig5dIjMt97i8AVdWNV0NzP7PUOAXy2enmbHEijJZ33oReQW2RmnT3cpVS95dA9FRDZzetdXNrAOeMqdIFQNyXjlHxiHg2f7pjK0zVAuaHWB1SGdWXISNG7OOwdiiQrL5cKOza2OSCnlA54+5fU/wAH8x71+Da7upmxcw9j/zuuRqXIVJCeTPX8+ySM6czBiPzNq27S+pyrOh18XUdRjIsvWHmHS+e2w6cjCStVLniaUAcaYAWXWN4vIKmPMABGZ5IvA1OmMMaRPfw4THspz3XZxffdbaRPexuqwzmzHYig5xqqgQRQ7nDpvvFL1mKcvNoaKSP/SFRHpB5ROAWj3elSqXHnffMOxNWtYNKwJoZEt+GP8H60O6eySkyAkijf3RdO+eQjxsRFWR6SU8hFPWyi3Am+LSCiurq4c4BYRCQGe9VVw6gRTUkL6c89THBvF7M4HeLLvM4QEVGf0mxpQlAe/Lia/x9WsXpPN3cM61963+JVS1ebpi41rgV4iEoFr9sasMrs/8Ulk6iRH53xM8Z49zLo2kh4t4hndYbTVIZ3djq/AXsAyvwEYg06kpVQ95+lTXhHA34HB7vVvgSeMMdk+jE25ObKzOfzaa2T2bM3yNgf5sN+U2jetb3m2zIPQaGb81oKENgHENa/lLSqlVLV4+lPpbSAXmOj+5AC1YC7ZhuHw62/gyMnhhfMPM6bTWOKj4q0O6eyKcmHHEo62v4zkg/mM05vxStV7nt5D6WiMuaLM+lQRadBzkNSU4n37OPLhh2y7oBUHYnKYee7dVofkme2LwFHEl47zsfkJo+M1oShV33naQikQkYGlKyIyACjwTUiqrPQXXsTY/Hi570Emx0+mReOKRvqvZZKTMGGteH1XcwZ0ak5UWIOdYUCpBsPTFsodwOzSm/LAEeBGXwWlXI6tW0fu4sUsvaQZodFhXNf9OqtD8kxhDuxcwqGuk0hZX8S9I7R1olRD4OlTXhuABBEJd6/n+DQqhXE6OTT9OYqbhTE7IYvnzptKkK2O/Ja//UtwFDO/uB/BAX5c2qO8aXGUUvXN2Yavv7eC7QAYY17yQUwKyPniCwo3b+b9cSGc2/YCLm5Th8bDTE7ChLdmxq5ILunektAgTxvCSqm67Gz/0sNqJAp1EmdhIekvvczRdk1Z1i2P/9bmaX1PVZAFO5exr9MkjqY79OkupRqQsw1fP7WmAlEnHHl3Nva0NP55rT8Tz/kDnSI7WR2S57Z/Cc4S/lvYj8jGAQzuEmV1REqpGlLpt+NEZL0vAlEu9owMMmfOZEevpqR0juBPvf9kdUiVk5yEM6INs35rwuXxMQTY6sALmEopr6jKv/Y60vdSN2W8+hqOokJevTCbu3rfRURQHRpMseAo7Pqanc2HU1hidKgVpRqYqtwt/cLrUSgACrf/Stbcuaw4P4SwjrFc2eVKq0OqnG0LwWnnw7y+xEY2om+7WjzHvVLK6yrdQjHGPOqLQBSkP/ccJY0LR+UCAAAe6UlEQVQCeLffMaacNwV/vzr2dFRyEo6Idry/L5KxvVvVnQcJlFJe4VFCEZFcEck55bNfRJJEpIOvg2wI8lauJH/VKj4ZABeecyn9YvpZHVLlHDsCu5eTHDkMpxHt7lKqAfL0V+CXgAO4pgAWXFMARwPbcQ0ceZEvgmsojN3OoenTyWkRwuJznczrW+7rP7Xbts/BOHg7qw/dY8Lp3FKfOFeqofG0y2ukMWaGMSbXGJNjjJkJjDLGfAxoR3k1Zc2dS/HOXcwYWMCk+BuJDYu1OqTKS06iJKI98w821Wl+lWqgPE0oThGZKCJ+7s/EMvuMLwJrKBx5eWT881X2dAhhb++W3NrrVqtDqrz8w/DbCn4OuwgRYYwmFKUaJE8TyrXAdUA6cMi9PElEGgF3+Si2BiFzxkwcR47wxuBC7km8l8YBja0OqfK2LQDjYGZmAv3bNyUmopHVESmlLODp4JC7gd9VsPs774XTsJSkppI5ezarE4IJj+/J5e0vtzqkqklOojCiI0sPRTFtqN6MV6qh8vQpry4iskxEtrjX40VEHx+upvSXXsaBg9kDS5jSb0rdfMw2Lx32fMePjQcTaLNxWa8YqyNSSlnE0y6vN4GHgBIAY8wmXE96qSoq2LiRnC++YMF5MOjc8fRo3sPqkKpm2wIwTv6dHs/Qc6KIaBRgdURKKYt4mlAaG2PWnLLN7u1gGgpjDIemTSc/PJCvBoVwd12Z1rc8W5LID+/Ij/kt9N0TpRo4TxPKYRHpiPuJLhG5EkjzWVT1XO5XX1Hw88+8P8DOjYm307xRc6tDqprcg7B3Fd8FDiIsOICh59SR6YmVUj7h6YuNdwIzgXNEJBX4DdeTX6qSnMXFHHrhBdKiA9k9MJYXuk2yOqSq27oAMPwrvReXxUcTHGCzOiKllIU8baGkAu8ATwNzgCXADVW9qIg0FZElIrLD/V3uy5Ei0lZEFovINhHZKiJx7u3tReRH9/Efi0hgVWOpaUff/wB7SiqzLrJzf7+/EmCrw/cckpPICe/MpuIY7e5SSnmcUD7D9dhwCa4hWPKA/GpcdwqwzBjTGVjmXi/Pe8DzxphuQD9c78EATAdedh9/FLilGrHUGPvRo2S8/jqbOvkTPmAQg2MHWx1S1eUcgH0/8LXfAFqGB9G/QzOrI1JKWczTLq9YY8xIL153LCfG/5oNLAceLFtARLoD/saYJQDGmDz3dgEuBv5Q5vjHgde9GJ9PHH7tXziO5fP+0AD+ed5f6+ZjwqW2fgYYXs/oyZgLW2Hzq8N1UUp5hactlO9FpJcXr9vSGJMG4P4u725uFyBLROaJyM8i8ryI2IBmQJYxpvQpsxSgwv4WEZksIutEZF1GRoYXq1A5Rbt3c3TORyzpLQwa9Ac6NKnjgzQnJ3E0rAvbHa0Yq91dSik8b6EMBG4Ukd+AIlwjDhtjTHxFB4jIUlwjEp/qkUrENgjoA+wDPgZuBBaUU7bC8cTcA1nOBEhMTLRs3LFDzz1PYYCweFgT5vS+w6owvCM7Bfb/yKLQG+nUIpQercKtjkgpVQt4mlAuq+yJjTHDK9onIodEJMYYkyYiMZy4N1JWCvCze9gXRGQ+cD6u4fKbiIi/u5USi+u+Tq2V/8MP5C9fztyhftw06G7CA+v4D+CtnwEwI7MXV16iE2kppVw86vIyxuwt71ON6y7gxFNiN+C66X+qtUCkiES51y8GthpjDPANcOVZjq8VjMNB2rRpZDaxsfuSc5jQaYLVIVVfchIZoV3ZY2K0u0spdVylpwD2kmnAJSKyA7jEvY6IJIrILABjjAO4H1gmIptxdbO96T7+QeBeEdmJ657KWzUcv8ey58+nZPuvvDfEcN+FD2Hzq+PvamTtg5S1LCjpT992kbRpWgdHR1ZK+YQlk5YbYzKBYeVsXwfcWmZ9CXDafRp3N1itnyPXmZ/PwZdfZmdrP8IvG0lidKLVIVVf8nwA3s3pw+SLdN4TpdQJVrVQGoTMt97GHM7kw0sCuS/xfqvD8Y7kJNJCupEm0VwerwlFKXWCJhQfKTl4kIy3ZrGqmzB45B+JCa0Hw7of3QMH1vNp4XkM6tycpiF1ZoACpVQN0ITiI+mvvILDXsKSy1pyU8+brA7HO9zdXXOO9WVcH70Zr5Q6mSYUHyhITiZn/md8cR7cdMmDNPKvJ1PiJs9jf6NuHAmI5pLuLa2ORilVy2hC8TJjDAemPUNuY2H3mD6MiBthdUjekbkL0jbycUEil3ZvSeNAS57nUErVYppQvCzv668pXrueTwYK9wx5tP689LfV1d01r/A8xmp3l1KqHPprpheZ4mJSpz1DSjMh7Kor6Nasm9UheU9yEruDu1Nka8WgTnV0QjCllE9pC8WLjsyZg9l/gLmXhnBXYh2e1vdUh3fCwc18lJ/I6PgY/G3610YpdTptoXiJIyuLg6/+gy1xwoAr7qJZo3o0P0hyEgCfl5zHv7W7S9VRJSUlpKSkUFhYaHUotVZwcDCxsbEEBFRt4j9NKF5y6N//hrxjLL2pDf/u9oezH1CXJCexPbAHQSFt6NOmidXRKFUlKSkphIWFERcXV3/ubXqRMYbMzExSUlJo3759lc6hfRdeULx3L0f/8yHfxAs3jH2sbk/re6qM7ZCezEf5iYxN0JGFVd1VWFhIs2bN9O9wBUSEZs2aVasFpwnFC/ZPf5ZicbL36gsZ2Hqg1eF4V/J8DMKXjn76dJeq8yqbTK6e8QNXz/jBR9HUPtVNtppQqunYunUUf/0tCy70585hj1odjvclJ5Hs34OWrePoGBVqdTRK1WmhoSf+DY0cOZImTZowevTocsveeeed9O7dm+7du9OoUSN69+5N7969mTt3bqWuuX79ehYtWlStuD2l91CqwTid7HnqcY6EQfj1k4iLiLM6JO9K3wYZ2/i45EbGDtGBIJXypgceeIBjx44xY8aMcvf/61//AmDPnj2MHj2aDRs2VOk669evZ8uWLYwcObLKsXpKWyjVkP3558gvu1hwSRi3nvcnq8PxvuQknPjxlbMfYxI0oSjlTcOGDSMsLKxKx+7YsYMRI0bQt29fBg8ezK+//grAnDlz6NmzJwkJCQwdOpSCggKeeOIJPvzwwyq1bipLWyhV5CwoYP/zz7I3Gi644UHCAqv2F6PWMgaTnMQGvx506diJFuHBVkeklNdM/TyZrQdyzlpua5qrjCf3Ubq3Cufvv+tR7dg8MXnyZGbNmkXHjh1ZtWoVd911F4sXL2bq1KksX76cli1bkpWVRaNGjXjsscfYsmULr7zyis/j0oRSRYfenoX/4WxW3NGBaV3GWx2O96VvRQ7/yqclNzO2t7ZOlKotsrKyWL16NVdcccXxbXa7HYABAwZw/fXXc9VVVzFhQs1PN64JpQrsGRkcnjmTn7oIv//9U/hJPew5dHd3fS39mdIz2upolPIqT1sSpS2Tj2+7wJfhVIoxhubNm5d7T+XNN9/kxx9/ZOHChSQkJLBp06Yaja0e/iT0vT0vTYMSOynXDaVPiz5Wh+N9xmC2JLGWHpzbrQthwfXovRql6rjIyEhiYmJISnKNYOF0Otm4cSMAu3fv5vzzz+fJJ58kMjKS1NRUwsLCyM3NrZHYNKFUUuH27RTN/5Jl5wVw66i/WR2ObxzcjBzZyfySftrdpZSPDBo0iKuuuoply5YRGxvLV1995fGxc+bM4Y033iAhIYEePXqwcOFCAO655x569epFr169GD58OD179uTiiy9m48aN9OnTR2/K1ybGGHY8+QiFQRA2+RaiQ+ppV1ByEg78WBVwAY93jbI6GqXqjby8vOPLK1eu9OiYuLg4tmzZctK2Dh06lJuAFixYcNq2qKgo1q1bV8lIq0YTSiXkfLsc/3XJLBnVhHv732Z1OL5hDM7kJH4wPRmQ0JUgf5vVESllmdp076Qu0C4vDxm7nd1PPUZaJCTe8TeC/evpY7RpG/E7+hsL7P0Z21uHWlFKeU4TiofSPnqf4JTDrJ7QlUs6XWZ1OL6TnIQdG5tCBtIvrqnV0Sil6hDt8vKAIzeX9H/+k11thAk3T6u/o5Uag2PzPFY5ezKkT1f8/OppPZVSPqEtFA8sv3wAQbmFpN0ygnOanWN1OL5zYD22nH187jifcdrdpZSqJG2heGBXCwc7WgjXjnvM6lB8KzmJEvz5rdlFdIsJtzoapaz3zuWu75u+sDaOOkJbKB5Ycn13/ndtJyKDI60OxXeMwb55HiscvRh2bhero1GqXqrp4euTkpJ4/vnnqx23p7SF4oHQwFCgns8FkvoT/rmpfOH4HffqyMJK+Zy3hq+32+34+5f/o3z8+JodZ9CShCIiTYGPgThgDzDRGHO0nHJtgVlAG8AAo4wxe0TkXWAIkO0ueqMxpmqTBXjgnZHv+OrUtYbZ8ikl+JMZewmxkY2tDkepem/YsGEsX768SscOHDiQIUOGsHLlSiZMmED79u155plnKC4uJioqig8++IAWLVowa9as4yMNT5o0iWbNmrF27VoOHjzIiy++6PWEY1ULZQqwzBgzTUSmuNcfLKfce8DTxpglIhIKOMvse8AY49txBBoKpxP75iS+dSRwad/OVkejlO/9bwoc3Hz2cgfdgyuW3ks5k+hecNm06sVVCTk5OaxYsQKAo0ePMmbMGESEN954gxdffJHp06efdkx6ejqrVq1i8+bNTJw4sd4klLHARe7l2cByTkkoItId8DfGLAEwxuShfCNlLQH5aSwyE/hbrxiro1FKeeCaa645vrxv3z4mTpzIwYMHKSoqokuX8u+Djhs3DhEhPj6e1NRUr8dkVUJpaYxJAzDGpIlIi3LKdAGyRGQe0B5YCkwxxjjc+58WkceAZe7tRTUReH3kTJ5HCQEUdRxBk8aBVoejlO952pKoxU95hYSEHF++8847efjhhxk1ahRLly5l2rTy6xcUFHR82Rjj9Zh89pSXiCwVkS3lfMZ6eAp/YBBwP3Ae0AG40b3vIeAc9/amlN9dVhrHZBFZJyLrMjIyqlqd+svppGRTEssdCYzU7i6l6qTs7Gxat26NMYbZs2dbFofPEooxZrgxpmc5n8+AQyISA+D+Ti/nFCnAz8aY3cYYOzAfONd97jTjUgS8A/Q7QxwzjTGJxpjEqCgdOfc0+1cTVHCIpX4XMrxbS6ujUarBqM7w9ad6/PHHGT9+PEOGDKFlS+v+HVvV5bUAuAGY5v7+rJwya4FIEYkyxmQAFwPrwJWE3F1lAowDtpRzvPKAffM87CYA/26jCA7QkYWV8iVvDV//3XffnbR+xRVXnDQlcKlbb731+PIHH3xQYSzeYlVCmQZ8IiK3APuAqwBEJBG43RhzqzHGISL3A8vcieMn4E338R+KSBQgwAbg9hqvQX3gdGDfMp+vnX0Y1beT1dEoVfvUwnsntZklCcUYkwkMK2f7OuDWMutLgPhyyl3s0wAbin0/EFyYwYqA63i6Y3Oro1FK1XH6pnwDVrTxUxwmiPD4y7HpyMJKqWrSsbwaKocdk+zq7rpcu7uUUl6gCaWh2ruK4OIjrA0ZQnxshNXRKKXqAe3yaqDyf54LJoioPqPr74RhSlXTTYtuAhrGeH7eoC2Uhshhx++XBSxznsvovh2tjkapBqN0+PoNGzZwwQUX0KNHD+Lj4/n4449PK+uN4esB1q9fz6JFi7wS/9loC6WheedyKMiiUUkWyZHDGNM85OzHKKW8qnHjxrz33nt07tyZAwcO0LdvX0aMGEGTJk2Ol/F0+PqzWb9+PVu2bGHkyJFeif1MtIXSAGXl5pBngmmd+DurQ1GqQerSpQudO7uGOmrVqhUtWrSgMkND7dixgxEjRtC3b18GDx7Mr7/+CsCcOXPo2bMnCQkJDB06lIKCAp544gk+/PDDKrVuKktbKA2NcRJUkM5Xzr5c1qe91dEoZYnpa6bzy5FfzlqutEzpvZQzOafpOTzYr8JhBSu0Zs0aiouL6djR8+7nyZMnM2vWLDp27MiqVau46667WLx4MVOnTmX58uW0bNmSrKwsGjVqxGOPPXZ8ThRf04TSwJiCbBpRyG8tL2VcWNDZD1BK+UxaWhrXXXcds2fPxs/Psw6jrKwsVq9efdJQK3a7HYABAwZw/fXXc9VVVzFhwgSfxHwmmlAamD0ZWTQzjWjfX7u7VMPlaUvCl0955eTkcPnll/PUU09x/vnne3ycMYbmzZuXe0/lzTff5Mcff2ThwoUkJCSwadMmb4Z8VnoPpSEoKYRtC2HuzcSag3zt7MPw+HZWR6VUg1VcXMz48eOPtyYqIzIykpiYGJKSkgBwOp1s3LgRgN27d3P++efz5JNPEhkZSWpqKmFhYeTm5nq9DuXRhFJf2Yth+yKYNxnzfEf4+Fryti1lrmMwy8x5hAZp41Qpq3zyySesWLGCd9999/jjwJV5imvOnDm88cYbJCQk0KNHDxYuXAjAPffcQ69evejVqxfDhw+nZ8+eXHzxxWzcuJE+ffroTXlVCY4S+O1b2JKE2fY5UpRNvl8Y/7Mn8pn9fLYG9aaPbOC6oBVWR6pUg1Q6ZPykSZOYNGmSR8eUN3x9hw4dyp0/ZcGCBadti4qKYt26dVWItvI0odR1Djvs/Q62zMO59XP8Co9wTBqzyN6XBY7z2RmSyLCEWO7oEU2/9k3ZPv1pqyNWqs7QN+QrRxNKXeR0wL4fIDkJx5b52AoOUyDBLLafy0LH+eyNvICLe7blLz2jiW8dgV+ZkYR7xOi4XUop39CEUlc4nZCyFrPlU+xbkgg4lk4hgSx19GGhYxLpLQdyUc84HugZTecWoTo+l1KqxmlCqc2MgQPrMZvnUbJ5HoH5BygmgOWOBBY6J5LV+mKG9GrPIz2iadO0sdXRKqUaOE0otY0xcHATjs2fUrJpHsF5+7HjzwpHL/5nxpEbdykX9erI37q3oEVYcOXPr1OaKqV8RBNKbWAMpG/FvulTijZ+SkjeHpzYWO3oyWK5nMIOlzE4oTOPndOCiEYBVkerVIOx97rrAWj3/nsWR1I3aEKxUsavFG78LyUb5xKWuxsxws/O7iyzTaak82gG9e7K3zpH0SjQZnWkSikvCA0NJS8vjw0bNnDHHXeQk5ODzWbjkUce4eqrrz6p7J133smqVasoLi7mt99+o2vXrgA8+uijXHnllR5dLykpiZ07d/LAAw94vS7l0YRS0zJ3kf/zfyne+CmRub8SaIQN5hy+9f8jzm6/Y2Dv7jzcoRkBNn3nVKn6ypvD19vtdvz9y/9RPn78eO8HfwaaUGrC0b1krfsE+6ZPaZ67jRBgm7MLq4JuRXqMZUCfnjzQJvKkx3uVUvVXly5dji+XHb6+bEI5k4EDBzJkyBBWrlzJhAkTaN++Pc888wzFxcVERUXxwQcf0KJFC2bNmnV8pOFJkybRrFkz1q5dy8GDB3nxxRe9nnA0ofiIydrP4TWf4Nj8KdG5yTQBNjg7Mq/xzfj1HM+Avr35c3SYPt6rlAUOPvMMRdvOPnx94S+uMqX3Us4kqNs5RD/8cKVjqcrw9eAaXHLFCteoF0ePHmXMmDGICG+88QYvvvgi06dPP+2Y9PR0Vq1axebNm5k4caImlNrM5KRx4Ps5mOR5xOZuIgrY4oxjSdhN2HpN4MLEvkzWGRKVUm5VGb6+1DXXXHN8ed++fUycOJGDBw9SVFR0UguorHHjxiEixMfHk5qaWq3Yy6MJpZrsOYfY990c/LYm0TZvA60x/OJsw3+b3EBA/BVc0K8/14VX4fFepZTPeNqS8OVTXlUdvr5USMiJX07vvPNOHn74YUaNGsXSpUuZNm1auccEBZ2YA8kYU/mgz0ITShUUZmfw23dzsG2dT8f8n+iAYZdpxcLI6wjufQX9+l3IOY0DrQ5TKVVLVWf4+vJkZ2fTunVrjDHMnj3bCxFWjSYUD+VlZ7JzxRwCts2nS/5PdBMHe000S5tfS0ifqzj3vAF0DNJ3RJRSZ1c6fH1mZibvvvsuwPGh7Kvi8ccfZ/z48cTGxtKvXz/S0tK8GK3nxBfNntoqMTHRVGUY5x9fvZ4+h78gUOyk0oKdUcMJOXci8YmDCQzQd0SUqgu2bdtGt27dKnVMQ3yxsbw/JxH5yRiTeLZjtYXiAWd4G9bbriQscSLn9B1Ka31HRKkGoSElEm/QhOKBC27QOUSUUupsLPlVW0SaisgSEdnh/o4sp8xQEdlQ5lMoIuPc+9qLyI/u4z8WEb0DrpRSFrOq72YKsMwY0xlY5l4/iTHmG2NMb2NMb+Bi4Biw2L17OvCy+/ijwC01E7ZSqi5rSPeMq6K6fz5WJZSxQOmzbbOBcWcpfyXwP2PMMXG9Wn4xMLcSxyulGrjg4GAyMzM1qVTAGENmZibBwVV/b86qeygtjTFpAMaYNBFpcZby1wAvuZebAVnGGLt7PQVoXdGBIjIZmAzQtm3bagWtlKq7YmNjSUlJISMjw+pQaq3g4GBiY2OrfLzPEoqILAWiy9n1SCXPEwP0Ar4q3VROsQp/5TDGzARmguux4cpcWylVfwQEBNC+fXurw6jXfJZQjDHDK9onIodEJMbdOokB0s9wqolAkjGmxL1+GGgiIv7uVkoscMBrgSullKoSq+6hLABucC/fAHx2hrK/Bz4qXTGuDtBvcN1X8eR4pZRSNcCqhDINuEREdgCXuNcRkUQRmVVaSETigDbAt6cc/yBwr4jsxHVP5a0aiFkppdQZNKihV0QkA9hbxcOb4+puqw/qS13qSz1A61Jb1Ze6VLce7YwxUWcr1KASSnWIyDpPxrKpC+pLXepLPUDrUlvVl7rUVD10UCqllFJeoQlFKaWUV2hC8dxMqwPwovpSl/pSD9C61Fb1pS41Ug+9h6KUUsortIWilFLKKzShVIKIPCkim9zD6S8WkVZWx1RVIvK8iPzirk+SiDSxOqaqEJGrRCRZRJwiUiefxhGRkSKyXUR2ishpI2/XFSLytoiki8gWq2OpDhFpIyLfiMg299+tu62OqapEJFhE1ojIRnddpvr0etrl5TkRCTfG5LiX/wx0N8bcbnFYVSIilwJfG2PsIjIdwBjzoMVhVZqIdAOcwAzgfmNM5ed4tpCI2IBfcb3gmwKsBX5vjNlqaWBVICKDgTzgPWNMT6vjqSr3cFAxxpj1IhIG/ASMq6P/TQQIMcbkiUgA8B1wtzFmtS+upy2USihNJm4hnGFQytrOGLO4zIjNq3GNiVbnGGO2GWO2Wx1HNfQDdhpjdhtjioE5uKZ3qHOMMSuAI1bHUV3GmDRjzHr3ci6wjTOMaF6bGZc892qA++Ozn1uaUCpJRJ4Wkf3AtcBjVsfjJTcD/7M6iAaqNbC/zPoZp2NQNcs9/FMf4EdrI6k6EbGJyAZcg/AuMcb4rC6aUE4hIktFZEs5n7EAxphHjDFtgA+Bu6yN9szOVhd3mUcAO6761Eqe1KMOq9R0DKrmiEgo8Cnwl1N6J+oUY4zDPfNtLNBPRHzWHWnVBFu11pmG3T/Ff4AvgL/7MJxqOVtdROQGYDQwzNTim2mV+G9SF6XgGgC1lE7HUAu47zd8CnxojJlndTzeYIzJEpHlwEjAJw9OaAulEkSkc5nVMcAvVsVSXSIyEteozWOMMcesjqcBWwt0FpH2IhKIa3bSBRbH1KC5b2S/BWwzxrx0tvK1mYhElT7BKSKNgOH48OeWPuVVCSLyKdAV11NFe4HbjTGp1kZVNe6h/4OATPem1XXxiTURGQ+8CkQBWcAGY8wIa6OqHBEZBbwC2IC3jTFPWxxSlYjIR8BFuEa2PQT83RhT56aWEJGBwEpgM65/6wAPG2O+tC6qqhGReGA2rr9bfsAnxpgnfHY9TShKKaW8Qbu8lFJKeYUmFKWUUl6hCUUppZRXaEJRSinlFZpQlFJKeYUmFKW8SETyzl7qjMfPFZEO7uVQEZkhIrvcI8WuEJH+IhLoXtYXk1WtoglFqVpCRHoANmPMbvemWbgGW+xsjOkB3Ag0dw8iuQy42pJAlaqAJhSlfEBcnnePObZZRK52b/cTkX+7WxwLReRLEbnSfdi1wGfuch2B/sCjxhgngHtE4i/cZee7yytVa2iTWSnfmAD0BhJwvTm+VkRWAAOAOKAX0ALX0Ohvu48ZAHzkXu6B661/RwXn3wKc55PIlaoibaEo5RsDgY/cI70eAr7FlQAGAv81xjiNMQeBb8ocEwNkeHJyd6Ipdk8ApVStoAlFKd8ob1j6M20HKACC3cvJQIKInOnfaBBQWIXYlPIJTShK+cYK4Gr35EZRwGBgDa4pWK9w30tpiWswxVLbgE4AxphdwDpgqnv0W0Skc+kcMCLSDMgwxpTUVIWUOhtNKEr5RhKwCdgIfA381d3F9SmuOVC2ADNwzQSY7T7mC05OMLcC0cBOEdkMvMmJuVKGAnVu9FtVv+low0rVMBEJNcbkuVsZa4ABxpiD7vkqvnGvV3QzvvQc84CHjDHbayBkpTyiT3kpVfMWuic9CgSedLdcMMYUiMjfcc0pv6+ig90Tcc3XZKJqG22hKKWU8gq9h6KUUsorNKEopZTyCk0oSimlvEITilJKKa/QhKKUUsorNKEopZTyiv8HR1rTh3wp4rcAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "test_means = grid.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = grid.cv_results_[ 'std_test_score' ]\n",
    "train_means = grid.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = grid.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "\n",
    "n_Cs = len(Cs)\n",
    "number_penaltys = len(penaltys)\n",
    "test_scores = numpy.array(test_means).reshape(n_Cs,number_penaltys)\n",
    "train_scores = numpy.array(train_means).reshape(n_Cs,number_penaltys)\n",
    "test_stds = numpy.array(test_stds).reshape(n_Cs,number_penaltys)\n",
    "train_stds = numpy.array(train_stds).reshape(n_Cs,number_penaltys)\n",
    "\n",
    "x_axis = numpy.log10(Cs)\n",
    "for i, value in enumerate(penaltys):\n",
    "    #pyplot.plot(log(Cs), test_scores[i], label= 'penalty:'   + str(value))\n",
    "    matplot.errorbar(x_axis, test_scores[:,i], yerr=test_stds[:,i] ,label = penaltys[i] +' Test')\n",
    "    matplot.errorbar(x_axis, train_scores[:,i], yerr=train_stds[:,i] ,label = penaltys[i] +' Train')\n",
    "    \n",
    "matplot.legend()\n",
    "matplot.xlabel( 'log(C)' )                                                                                                      \n",
    "matplot.ylabel( 'neg-logloss' )\n",
    "matplot.savefig('LogisticGridSearchCV_C.png' )\n",
    "\n",
    "matplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从图标中可以看出，参数C=1时，负损失最小"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(0.7337662337662337, 0.7402597402597403)\n"
     ]
    }
   ],
   "source": [
    "lr_l1= LogisticRegression(penalty='l1',C=1)\n",
    "lr_l1.fit(x_train,y_train)\n",
    "accuracy_l1 = lr_l1.score(x_test, y_test)\n",
    "lr_l2= LogisticRegression(penalty='l2',C=1)\n",
    "lr_l2.fit(x_train,y_train)\n",
    "accuracy_l2 = lr_l2.score(x_test, y_test)\n",
    "print(accuracy_l1,accuracy_l2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "发现带入参数后，L2正则比L1正则性能更好"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Default SVC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.svm import LinearSVC\n",
    "import sklearn.metrics as metrics\n",
    "SVC1 = LinearSVC().fit(x_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Classification report for classifier LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,\n",
      "     intercept_scaling=1, loss='squared_hinge', max_iter=1000,\n",
      "     multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,\n",
      "     verbose=0):\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "          0       0.75      0.90      0.82        99\n",
      "          1       0.72      0.47      0.57        55\n",
      "\n",
      "avg / total       0.74      0.75      0.73       154\n",
      "\n",
      "\n",
      "Confusion matrix:\n",
      "[[89 10]\n",
      " [29 26]]\n"
     ]
    }
   ],
   "source": [
    "y_predict = SVC1.predict(x_test)\n",
    "\n",
    "print(\"Classification report for classifier %s:\\n%s\\n\"% (SVC1, metrics.classification_report(y_test, y_predict)))\n",
    "print(\"Confusion matrix:\\n%s\" % metrics.confusion_matrix(y_test, y_predict))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [],
   "source": [
    "def fit_grid_point_Linear(C, x_train, y_train, x_val, y_val):\n",
    "    \n",
    "    # 在训练集是那个利用SVC训练\n",
    "    SVC2 =  LinearSVC( C = C)\n",
    "    SVC2 = SVC2.fit(x_train, y_train)\n",
    "    \n",
    "    # 在校验集上返回accuracy\n",
    "    accuracy = SVC2.score(x_val, y_val)\n",
    "    \n",
    "    print(\"accuracy: {}\".format(accuracy))\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.727272727273\n",
      "accuracy: 0.733766233766\n",
      "accuracy: 0.74025974026\n",
      "accuracy: 0.733766233766\n",
      "accuracy: 0.753246753247\n",
      "accuracy: 0.701298701299\n",
      "accuracy: 0.701298701299\n"
     ]
    }
   ],
   "source": [
    "C_s = numpy.logspace(-3, 3, 7)\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "#    for j, penalty in enumerate(penalty_s):\n",
    "    tmp = fit_grid_point_Linear(oneC, x_train, y_train, x_test, y_test)\n",
    "    accuracy_s.append(tmp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_axis = numpy.log10(C_s)\n",
    "\n",
    "matplot.plot(x_axis, numpy.array(accuracy_s), 'b-')\n",
    "    \n",
    "matplot.legend()\n",
    "matplot.xlabel( 'log(C)' )                                                                                                      \n",
    "matplot.ylabel( 'accuracy' )\n",
    "matplot.savefig('SVM_Otto.png' )\n",
    "\n",
    "matplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以由图看吃，C的取值为1时，准确度比较高\n",
    "\n",
    "### RBF核"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [],
   "source": [
    "def fit_grid_point_RBF(C, gamma, x_train, y_train, x_val, y_val):\n",
    "    \n",
    "    # 在训练集是那个利用SVC训练\n",
    "    SVC3 =  SVC( C = C, kernel='rbf', gamma = gamma)\n",
    "    SVC3 = SVC3.fit(x_train, y_train)\n",
    "    \n",
    "    # 在校验集上返回accuracy\n",
    "    accuracy = SVC3.score(x_val, y_val)\n",
    "    \n",
    "    print(\"accuracy: {}\".format(accuracy))\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.642857142857\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.707792207792\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.733766233766\n",
      "accuracy: 0.74025974026\n",
      "accuracy: 0.707792207792\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.753246753247\n",
      "accuracy: 0.727272727273\n",
      "accuracy: 0.688311688312\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.746753246753\n",
      "accuracy: 0.662337662338\n",
      "accuracy: 0.688311688312\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.642857142857\n"
     ]
    }
   ],
   "source": [
    "from sklearn.svm import SVC\n",
    "C_s = numpy.logspace(-2, 2, 5)\n",
    "gamma_s = numpy.logspace(-2, 2, 5)  \n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "    for j, gamma in enumerate(gamma_s):\n",
    "        tmp = fit_grid_point_RBF(oneC, gamma, x_train, y_train, x_test, y_test)\n",
    "        accuracy_s.append(tmp)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 从结果上看，gamma值不同准确度也不同，最高在0.75"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "accuracy_s1 =numpy.array(accuracy_s).reshape(len(C_s),len(gamma_s))\n",
    "x_axis = numpy.log10(C_s)\n",
    "for j, gamma in enumerate(gamma_s):\n",
    "    matplot.plot(x_axis, numpy.array(accuracy_s1[:,j]), label = ' Test - log(gamma)' + str(numpy.log10(gamma)))\n",
    "\n",
    "matplot.legend()\n",
    "matplot.xlabel( 'log(C)' )                                                                                                      \n",
    "matplot.ylabel( 'accuracy' )\n",
    "matplot.savefig('RBF_SVM_Otto.png' )\n",
    "\n",
    "matplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 由RBF核看出，参数取值为1时测试结果相对比较稳定。如果c取值为10，则结果有时准确度会低于0.7,可能发生了过拟合\n",
    "\n",
    "并且根据结果准确度和负损失来看，SVM比Logistic回归更好。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
